//
//  VPHTTPRequestOperationManager.h
//  VPDownloadManager
//
//  Created by vernepung on 16/3/10.
//  Copyright © 2016年 vernepung. All rights reserved.
//

#import "VPDownloadModel.h"

@interface VPHTTPRequestOperationManager : NSObject<NSURLSessionDownloadDelegate>
/**
 *  最大下载数
 */
@property (nonatomic, assign) NSInteger maxDownloadCount;
/**
 *  等待下载队列 先进先出 默认YES， 当NO时，先进后出
 */
@property (nonatomic, assign) BOOL resumeDownloadFIFO;
/**
 *  全部并发 默认NO, 当YES时，忽略maxDownloadCount
 */
@property (nonatomic, assign) BOOL isBatchDownload;
/**
 *  后台下载完成的回调
 */
@property (copy) void (^ _Nullable backgroundSessionCompletionHandler)();

+ (instancetype _Nonnull)manager;
/**
 *  配置后台session
 */
- (void)configureBackroundSession;
/**
 *  开始新的下载
 */
- (void)startNewDownloadWithModel:(VPDownloadModel * _Nonnull)model;
/**
 *  恢复下载（除非确定对这个model进行了suspend，否则使用start）
 */
- (void)resumeWithDownloadModel:(VPDownloadModel *_Nonnull)downloadModel;
/**
 *  暂停下载
 */
- (void)pauseDownloadModel:(VPDownloadModel * _Nonnull)model;
/**
 *  取消下载
 */
- (void)cancleWithDownloadModel:(VPDownloadModel * _Nonnull)downloadModel;
/**
 *  取消所有后台下载任务
 */
- (void)cancleAllBackgroundSessionTasks;
/**
 *  根据下载状态获取下载模型
 *
 *  @param state kVPDownloadState
 *
 *  @return VPDownloadModel
 */
- (NSArray<VPDownloadModel *> * __nullable)getModelsWithState:(kVPDownloadState)state;
/**
 *  判断下载模型是否存在
 *
 *  @param model VPDownloadModel
 *
 *  @return VPDownloadModel
 */
- (VPDownloadModel * __nullable)isExistsModel:(VPDownloadModel * _Nonnull)model;
/**
 当前最外层文件夹名称
 
 @return 最外层文件夹名称
 */
+ (NSString * _Nullable)currentMainPath;

/**
 *  删除下载模型
 */
- (void)removeExistsModel:(VPDownloadModel *_Nonnull)model;
/**
 *  取消所有下载
 */
- (void)cancelAllDownloads;
/**
 *  开启所有下载
 */
- (void)restartAllDownloads;
/**
 *  清空所有(下载载体信息全会被清空)
 */
- (void)clear;
/**
 *  保存当前的下载信息
 */
- (void)save;
/**
 注册最外层文件夹名称
 
 @param mainName 文件夹名称
 */
+ (void)registerManagerWithMainName:(NSString * _Nullable)mainName;

@end
